package cn.tedu.oop2;
/**本类用于测试代码块*/
/**执行顺序
 * 构造代码块 -> 构造方法 - > 普通方法 -> 局部代码块
 * 1.当创建对象时，会触发构造函数
 * 2.创建对象时，也会触发构造代码块，并且构造代码块优先于构造方法执行
 * 3.我们创建好对象后，才能通过对象调用普通方法
 * 4.如果普通方法里局部代码块，才会触发对应的局部代码块*/
public class TestBlock {
    public static void main(String[] args) {
       Pig p = new Pig();
       Pig p1 = new Pig(3);
       Pig p2 = new Pig("");
       p2.eat();
    }
}
class Pig{
    String food;
    int age;
    /**构造代码块:{}
     * 1.位置:类里方法外
     * 2.执行时机:每次创建对象时，都会执行构造代码块，并且优先于构造方法执行
     * 3.作用:用于提取所有构造方法的共性功能
     * */
    {
        System.out.println("我是一个构造代码块");
    }
    public Pig(){
        System.out.println("无参构造");
    }
    public Pig(int n){
        System.out.println("含参构造1");
    }
    public Pig(String s){
        System.out.println("含参构造2");
    }

    public void eat(){
        System.out.println("小猪爱吃菜叶子~");
        /**局部代码块{}
         * 1.位置:方法里
         * 2.执行时机:调用本局部代码块所处的方法时才会执行
         * 3.作用:用于控制变量的作用范围，变量的作用范围越小越好*/
        {
            System.out.println("我是一个局部代码块");
        }
    }
}
